# 子应用要有独立的路由文件
# 子应用可以匹配的资源
# 总路由--》子应用路由-》资源（views.py）
from django.urls import path,register_converter,re_path
from .views import (views,query_views,F_Q_views,annotate_query,Model_query,limit_query,
                    session_view,cookie_view)   # 导入太多包，用元组括号括起来，用逗号分隔
from .views import customUrlPattern

# 注册自定义的路径转换器。
# 如果使用的是自定义的路径转换器，在path函数中，则只能使用自定义的路径转换器，不能使用内置的路径转换器。
# 第一个参数是转换器类，第二个参数是转换器的名称。
register_converter(customUrlPattern.YearConverter, "year")

# 路径转换器： 用于将URL中的动态部分转换为特定类型的Python对象（int、str、UUID,slug,path等）,并将其传递给视图函数。
# 用于实现动态路由匹配，让同一个url模式可以匹配不同参数的请求。
# 分为：内置路径转换器、自定义路径转换器

urlpatterns = [
            #    path("<int:a>/", views.index),
            
            # 位置参数
            path("<int:year>/<int:day>/", views.index),
            #    path("<year:year>/", views.index),
            
            # 匹配四位数的年份 / 两位数的日期 / 11位数的手机号码
            # 使用分组匹配，给分组命名 ?P<name> 
            # 正则表达式用re_path匹配
            
            # 关键字传参
            re_path(r"^(?P<year>\d{4})/(?P<month>\d{2})/(?P<phone>1[3-9]\d{9})/$",views.year_month_phone),
            
            # 查询字符串，通过?key=value传递参数
            path("s/", views.search_view),
            
            # 表单提交，POST请求
            path('p/', views.post_view),
            
            # 登录
            path("login/", views.LoginView),
            
            # 下载路由
            path("download/", views.download_file),
            # 请求头
            # path("m/", views.meta_view),
            # --------------------------------------
               path("indexs/", views.productView,name="index"),
               path("update/", views.productUpdateView),
               path("del/", views.ProductDelView,name="del"),
               
               # session操作路由
               path("set_session/", session_view.set_session),
               path("get_session/", session_view.get_session),
               path("del_session/", session_view.del_session),
               path("expire_session/", session_view.set_session_expiry),
               
               # cookie操作路由
               path("set_cookie/", cookie_view.set_cookie),
               path("get_cookie/", cookie_view.get_cookie),
               path("del_cookie/", cookie_view.del_cookie),
               
               
               
               #==================================
               path("get/", query_views.get_query_view),
               path("all/", query_views.query_all_view),
               path("filter/", query_views.query_filter_view),
               
               #==================================
               path("f/", F_Q_views.F_query),
               path("q/", F_Q_views.Q_query),
               
               #==================================
               path("anno/", annotate_query.agnotate_view),
               
               #==================================
               path("model/", Model_query.get_product_review),
               
               #==================================
               path("limit/", limit_query.limit_query_view)
               ]
